package interfaces;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

import dto.Administracion.DTO_Destino;
import dto.Administracion.DTO_Empleado;
import dto.Administracion.DTO_Rol;
import dto.Administracion.DTO_Stock;
import dto.Administracion.DTO_Sucursal;
import dto.Administracion.DTO_Usuario;
import dto.Cliente.DTO_Cliente;
import dto.Cliente.DTO_CuentaCorriente;
import dto.Cliente.DTO_DireccionEntrega;
import dto.Cliente.DTO_FacturaCliente;
import dto.Cliente.DTO_ProductoCliente;
import dto.Cliente.DTO_ReciboPago;
import dto.Encomienda.DTO_ActividadEncomienda;
import dto.Encomienda.DTO_Destinatario;
import dto.Encomienda.DTO_Encomienda;
import dto.Encomienda.DTO_EncomiendaEmpresa;
import dto.Encomienda.DTO_EncomiendaParticular;
import dto.Encomienda.DTO_Envio;
import dto.Encomienda.DTO_EnvioPropio;
import dto.Encomienda.DTO_EnvioTercerizado;
import dto.Encomienda.DTO_HojaDeRuta;
import dto.Encomienda.DTO_ProductoClienteEncomienda;
import dto.Encomienda.DTO_Remito;
import dto.Encomienda.DTO_Trayecto;
import dto.Proveedor.DTO_FacturaProveedor;
import dto.Proveedor.DTO_PrecioCarrier;
import dto.Proveedor.DTO_Proveedor;
import dto.Proveedor.DTO_Seguro;
import dto.Proveedor.DTO_ServicioSeguridad;
import dto.Vehiculo.DTO_PlanMantenimiento;
import dto.Vehiculo.DTO_TareaMantenimiento;
import dto.Vehiculo.DTO_TareaMantenimientoRealizada;
import dto.Vehiculo.DTO_TareasPorKilometro;
import dto.Vehiculo.DTO_TareasPorTiempo;
import dto.Vehiculo.DTO_Vehiculo;


public interface InterfazRemotaAdministracion extends Remote{
	public static final String url = "localhost/RecursoRMI";
	
	/***********************************************************************************************/
	/**Administracion */
	/***********************************************************************************************/
	
	//Empleado
	public void altaEmpleado(DTO_Empleado empleado) throws RemoteException;
	public void modificarEmpleado(DTO_Empleado empleado) throws RemoteException;
	public void bajaEmpleado(Integer idEmpleado) throws RemoteException;
	public DTO_Empleado getEmpleado(Integer idEmpleado) throws RemoteException;
	
	//Sucursal
	public void altaSucursal(DTO_Sucursal sucursal) throws RemoteException;
	public void modificarSucursal(DTO_Sucursal sucursal) throws RemoteException;
	public void bajaSucursal(Integer idSucursal) throws RemoteException;
	public DTO_Sucursal getSucursal(Integer idSucursal) throws RemoteException;
	
	//Stock
	public void altaStock(DTO_Stock stock) throws RemoteException;
	public void modificarStock(DTO_Stock stock) throws RemoteException;
	public void bajaStock(Integer idStock) throws RemoteException;
	public DTO_Stock getStock(Integer idStock) throws RemoteException;
	
	//Destino
	public void altaDestino(DTO_Destino destino) throws RemoteException;
	public void modificarDestino(DTO_Destino destino) throws RemoteException;
	public void bajaDestino(Integer idDestino) throws RemoteException;
	public DTO_Destino getDestinoNacional(Integer idDestino) throws RemoteException;
	public DTO_Destino getDestinoInternacional(Integer idDestino) throws RemoteException;
	
	//Usuario
	public void altaUsuario(DTO_Usuario usuario) throws RemoteException;
	public void bajaUsuario(String usuario) throws RemoteException;
	public void ingresoUsuario(String usuario) throws RemoteException;
	public void cambiarPassword(String usuario, String oldPassword, String newPassword)  throws RemoteException;
	public DTO_Usuario validarUsuario(String usuario, String password)  throws RemoteException;
	
	//Listados
	public String[] listarPaises() throws RemoteException;
	public String[] listarProvincias(String pais) throws RemoteException;
	public List<DTO_Rol> listarRoles() throws RemoteException;
	public List<DTO_Rol> buscarRolesUsuario(String idUsario) throws RemoteException;
	public List<DTO_Empleado> listarEmpleados() throws RemoteException;
	public List<DTO_Empleado> listarEmpleados(Integer idSucursal) throws RemoteException;
	public List<DTO_Sucursal> listarSucursales() throws RemoteException;
	public List<DTO_Stock> listarStock() throws RemoteException;
	public List<DTO_Stock> listarStock(Integer idSucursal) throws RemoteException;
	public List<DTO_Destino> listarDestinoNacional() throws RemoteException;
	public List<DTO_Destino> listarDestinoNacional(Integer idSucursal) throws RemoteException;
	public List<DTO_Destino> listarDestinoInternacional() throws RemoteException;
	public List<DTO_Destino> listarDestinoInternacional(Integer idSucursal) throws RemoteException;
	public List<DTO_Usuario> listarUsuarios() throws RemoteException;
	
	/***********************************************************************************************/
	/**Clientes */
	/***********************************************************************************************/
	//Cliente
	public void altaCliente(DTO_Cliente cliente) throws RemoteException;
	public void modificarCliente(DTO_Cliente cliente) throws RemoteException;
	public void bajaCliente(Integer idCliente) throws RemoteException;
	public DTO_Cliente getCliente(Integer idCliente) throws RemoteException;
	
	//Cuenta Corriente
	public void actualizarCuentaCorriente(DTO_CuentaCorriente cuentaCorriente) throws RemoteException;

	//Factura Cliente
	public void altaFacturaCliente(DTO_FacturaCliente factura) throws RemoteException;
	public void modificarFacturaCliente(DTO_FacturaCliente factura) throws RemoteException;
	public DTO_FacturaCliente getFacturaCliente(Integer idFactura) throws RemoteException;
	
	//Recibo Pago
	public void altaReciboPago(DTO_ReciboPago recibo) throws RemoteException;
	public void modificarReciboPago(DTO_ReciboPago recibo) throws RemoteException;
	public DTO_ReciboPago getReciboPago(Integer idRecibo) throws RemoteException;
	
	//Direccion Entrega
	public void altaDireccionEntrega(DTO_DireccionEntrega direccion) throws RemoteException;
	public void modificarDireccionEntrega(DTO_DireccionEntrega direccion) throws RemoteException;
	public void bajaDireccionEntrega(Integer idDireccion) throws RemoteException;
	public DTO_DireccionEntrega getDireccionEntrega(Integer idDireccion) throws RemoteException;
	
	//Producto Cliente
	public void altaProductoCliente(DTO_ProductoCliente producto) throws RemoteException;
	public void modificarProductoCliente(DTO_ProductoCliente producto) throws RemoteException;
	public void bajaProductoCliente(Integer idProducto) throws RemoteException;
	public DTO_ProductoCliente getProductoCliente(Integer idProducto) throws RemoteException;
	
	//Listados
	public List<DTO_Cliente> listarClientes() throws RemoteException;
	public List<DTO_FacturaCliente> listarFacturasClientePendientes() throws RemoteException;
	public List<DTO_FacturaCliente> listarFacturasClientePendientes(Integer idCliente) throws RemoteException;
	public List<DTO_FacturaCliente> listarFacturasCliente(Integer idCliente) throws RemoteException;
	public List<DTO_ReciboPago> listarRecibos() throws RemoteException;
	public List<DTO_ReciboPago> listarRecibos(Integer idCliente) throws RemoteException;
	public List<DTO_DireccionEntrega> listarDireccionEntrega(Integer idCliente) throws RemoteException;
	public List<DTO_ProductoCliente> listarProductoCliente(Integer idCliente) throws RemoteException;
	
	/***********************************************************************************************/
	/**Encomiendas */
	/***********************************************************************************************/
	//Actividad
	public void agregarActividad(DTO_ActividadEncomienda actividad) throws RemoteException;
	public DTO_ActividadEncomienda getActividad(Integer idActividad) throws RemoteException;
	
	//Destinatario
	public void altaDestinatario(DTO_Destinatario destinatario) throws RemoteException;
	public void modificarDestinatario(DTO_Destinatario destinatario) throws RemoteException;
	public void bajaDestinatario(Integer idDestinatario) throws RemoteException;
	public DTO_Destinatario getDestinatario(Integer idDestinatario) throws RemoteException;
	
	//Encomienda
	public void altaEncomiendaEmpresa(DTO_EncomiendaEmpresa encomienda) throws RemoteException;
	public void modificarEncomiendaEmpresa(DTO_EncomiendaEmpresa encomienda) throws RemoteException;
	public DTO_EncomiendaEmpresa getEncomiendaEmpresa(Integer idEncomienda) throws RemoteException;
	public void altaEncomiendaParticular(DTO_EncomiendaParticular encomienda) throws RemoteException;
	public void modificarEncomiendaParticular(DTO_EncomiendaParticular encomienda) throws RemoteException;
	public DTO_EncomiendaParticular getEncomiendaParticular(Integer idEncomienda) throws RemoteException;

	//Stock
	public void ingresoStock(Integer idStock, Integer idEncomienda) throws RemoteException;
	public void movimientoInterno(Integer idStock, Integer idEncomienda) throws RemoteException;
	public void egresoStock(Integer idStock, Integer idEncomienda) throws RemoteException;

	//Envio
	public void altaEnvio(DTO_Envio envio) throws RemoteException;
	public void modificarEnvio(DTO_Envio envio) throws RemoteException;
	public void altaEnvioTercerizado(DTO_Envio envio) throws RemoteException;
	public void modificarEnvioTercerizado(DTO_Envio envio) throws RemoteException;
	public DTO_Envio getEnvio(Integer idEnvio) throws RemoteException;

	//Hoja de Ruta
	public void altaHojaRuta(DTO_HojaDeRuta hojaRuta) throws RemoteException;
	public void modificarHojaRuta(DTO_HojaDeRuta hojaRuta) throws RemoteException;
	public DTO_HojaDeRuta getHojaRuta(Integer idHojaRuta) throws RemoteException;
	
	//Remito
	public void altaRemito(DTO_Remito remito) throws RemoteException;
	public void conformarRemito(Integer idRemito, String recibidoPor) throws RemoteException;
	
	
	//Listados
	public List<DTO_ActividadEncomienda> listarActividades(Integer idEncomienda) throws RemoteException;
	
	public List<DTO_Destinatario> listarDestinatarios(Integer idEncomienda) throws RemoteException;
	
	public List<DTO_Encomienda> listarEncomiendas() throws RemoteException;
	public List<DTO_EncomiendaEmpresa> listarEncomiendasEmpresa() throws RemoteException;
	public List<DTO_EncomiendaParticular> listarEncomiendasParticulares() throws RemoteException;
	public List<DTO_Encomienda> listarEncomiendas(Integer idSucursal) throws RemoteException;
	public List<DTO_EncomiendaEmpresa> listarEncomiendasEmpresa(Integer idSucursal) throws RemoteException;
	public List<DTO_EncomiendaParticular> listarEncomiendasParticulares(Integer idSucursal) throws RemoteException;
	
	public List<DTO_EnvioPropio> listarEnviosPropios() throws RemoteException;
	public List<DTO_EnvioTercerizado> listarEnviosTercerizados() throws RemoteException;
	
	public List<DTO_ProductoClienteEncomienda> listarProductosEncomienda(Integer idEncomienda) throws RemoteException;
	
	public List<DTO_Remito> listarRemitos(Integer idEncomienda) throws RemoteException;
	
	public List<DTO_Trayecto> listarTrayectos(Integer idHojaRuta) throws RemoteException;
	/***********************************************************************************************/
	/**Proveedores */
	/***********************************************************************************************/
	//Proveedor
	public void altaProveedor(DTO_Proveedor proveedor) throws RemoteException;
	public void modificarProveedor(DTO_Proveedor proveedor) throws RemoteException;
	public void bajaProveedor(Integer id) throws RemoteException;
	public DTO_Proveedor buscarProveedor(String cuit) throws RemoteException;
	
	//Factura Proveedor
	public void altaFacturaProveedor(DTO_FacturaProveedor factura) throws RemoteException;
	public void modificarFacturaProveedor(DTO_FacturaProveedor factura) throws RemoteException;
	public DTO_FacturaProveedor buscarFacturaProveedor(Integer idFactura) throws RemoteException;
	
	//Servicio Seguridad
	public void altaServicioSeguridad(DTO_ServicioSeguridad servicioSeguridad) throws RemoteException;
	public void modificarServicioSeguridad(DTO_ServicioSeguridad servicioSeguridad) throws RemoteException;
	public void bajaServicioSeguridad(Integer idServicioSeguridad) throws RemoteException;
	public DTO_ServicioSeguridad buscarServicioSeguridad(Integer idServicioSeguridad) throws RemoteException;
	
	//Seguro
	public void altaSeguro(DTO_Seguro seguro) throws RemoteException;
	public void modificarSeguro(DTO_Seguro seguro) throws RemoteException;
	public void bajaSeguro(Integer idSeguro) throws RemoteException;
	public DTO_Seguro buscarSeguro(Integer idSeguro) throws RemoteException;
	
	//Precio Carrier
	public void altaPrecioCarrierNacional(DTO_PrecioCarrier precioCarrier) throws RemoteException;
	public void modificarPrecioCarrierNacional(DTO_PrecioCarrier precioCarrier) throws RemoteException;
	public void bajaPrecioCarrierNacional(Integer idPrecioCarrier) throws RemoteException;
	public DTO_PrecioCarrier buscarPrecioCarrierNacional(Integer idPrecioCarrier) throws RemoteException;
	public void altaPrecioCarrierInternacional(DTO_PrecioCarrier precioCarrier) throws RemoteException;
	public void modificarPrecioCarrierInternacional(DTO_PrecioCarrier precioCarrier) throws RemoteException;
	public void bajaPrecioCarrierInternacional(Integer idPrecioCarrier) throws RemoteException;
	public DTO_PrecioCarrier buscarPrecioCarrierInternacional(Integer idPrecioCarrier) throws RemoteException;
	
	//Listados
	public List<DTO_Proveedor> listarProveedores() throws RemoteException;
	public List<DTO_Proveedor> listarTalleres() throws RemoteException;
	public List<DTO_Proveedor> listarAseguradoras() throws RemoteException;
	public List<DTO_Proveedor> listarEmpresasSeguridad() throws RemoteException;
	public List<DTO_Proveedor> listarCarriers() throws RemoteException;
	public List<DTO_FacturaProveedor> listarFacturasProveedorPendientes() throws RemoteException;
	public List<DTO_FacturaProveedor> listarFacturasProveedor(Integer idProveedor) throws RemoteException;
	public List<DTO_FacturaProveedor> listarFacturasProveedorPendientes(Integer idProveedor) throws RemoteException;
	public List<DTO_ServicioSeguridad> listarServicioSeguridad(Integer idProveedor) throws RemoteException;
	public List<DTO_Seguro> listarSeguros(Integer idProveedor) throws RemoteException;
	public List<DTO_PrecioCarrier> listarPrecioCarrier(Integer idProveedor) throws RemoteException;
	public List<DTO_PrecioCarrier> listarPrecioCarrierDestino(Integer idDestino) throws RemoteException;

	/***********************************************************************************************/
	/**Vehiculos */
	/***********************************************************************************************/
	//Plan Matenimiento
	public void altaPlanMantenimiento(DTO_PlanMantenimiento planMantenimiento) throws RemoteException;
	public void modificarPlanMantenimiento(DTO_PlanMantenimiento planMantenimiento) throws RemoteException;
	public void bajaPlanMantenimiento(Integer idPlanMantenimiento) throws RemoteException;
	public DTO_PlanMantenimiento getPlanMantenimiento(Integer idPlanMantenimiento) throws RemoteException;
	
	//Tarea Mantenimiento
	public void altaTareaMantenimientoKilometro(DTO_TareasPorKilometro tarea) throws RemoteException;
	public void modificarTareaMantenimientoKilometro(DTO_TareasPorKilometro tarea) throws RemoteException;
	public void bajaTareaMantenimientoKilometro(Integer idTareaMantenimientoKilometro) throws RemoteException;
	public DTO_TareasPorKilometro getTareaMantenimientoKilometro(Integer idTareaMantenimientoKilometro) throws RemoteException;
	public void altaTareaMantenimientoTiempo(DTO_TareasPorTiempo tarea) throws RemoteException;
	public void modificarTareaMantenimientoTiempo(DTO_TareasPorTiempo tarea) throws RemoteException;
	public void bajaTareaMantenimientoTiempo(Integer idTareaMantenimientoTiempo) throws RemoteException;
	public DTO_TareasPorTiempo getTareaMantenimientoTiempo(Integer idTareaMantenimientoTiempo) throws RemoteException;
	
	//Vehiculo
	public void altaVehiculo(DTO_Vehiculo vehiculo) throws RemoteException;
	public void modificarVehiculo(DTO_Vehiculo vehiculo) throws RemoteException;
	public void bajaVehiculo(Integer idVehiculo) throws RemoteException;
	public DTO_Vehiculo buscarVehiculo(String patente) throws RemoteException;
	
	//Tarea Ralizada
	public void altaTareaMantenimientoRealizada(DTO_TareaMantenimientoRealizada tareaMantenimientoRealizada) throws RemoteException;
	public void modificarTareaMantenimientoRealizada(DTO_TareaMantenimientoRealizada tareaMantenimientoRealizada) throws RemoteException;
	public DTO_TareaMantenimientoRealizada getTareaMantenimientoRealizada(Integer idTareaMantenimientoRealizada) throws RemoteException;
	//Listados
	public List<DTO_PlanMantenimiento> listarPlanMantenimiento() throws RemoteException;
	public List<DTO_TareaMantenimiento> listarTareasMantenimiento(Integer idPlanMantenimiento) throws RemoteException;
	public List<DTO_Vehiculo> listarVehiculos() throws RemoteException;
	public List<DTO_Vehiculo> listarVehiculos(Integer idSucursal) throws RemoteException;
	public List<DTO_Vehiculo> listarVehiculosMantenimiento() throws RemoteException;
	public List<DTO_Vehiculo> listarVehiculosMantenimiento(Integer idSucursal) throws RemoteException;
	public List<DTO_TareaMantenimientoRealizada> listarTareaMantenimientoRealizada(Integer idVehiculo) throws RemoteException;
	public List<DTO_TareaMantenimientoRealizada> listarTareaMantenimientoRealizadaProveedor(Integer idProveedor) throws RemoteException;

}
